<?php

class WfPlantillaFactura {
//<editor-fold defaultstate="collapsed" desc="Constantes">
  const NOMBRE_ENTIDAD = "WfPlantillaFactura";
  const NOMBRE_ENTIDAD_ARCHIVO = "WfFacturaFlujo";
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Campos">
  private $_id;
  private $_numero;
  private $_fechaEmision;
  private $_fechaVencimiento;
  private $_fechaRecepcion;
  private $_fechaIngresoSistema;
  private $_montoNeto;
  private $_exentoIVA;
  private $_iVA;
  private $_observacion;
  private $_idFlujo;
  private $_idProveedor;
  private $_existe;
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Propiedades">
  public function getId() { return $this->_id; }
  public function setId($value) { $this->_id = $value; }

  public function getNumero() { return $this->_numero; }
  public function setNumero($value) { $this->_numero = $value; }

  public function getFechaEmision() { return $this->_fechaEmision; }
  public function setFechaEmision($value) { $this->_fechaEmision = $value; }

  public function getFechaVencimiento() { return $this->_fechaVencimiento; }
  public function setFechaVencimiento($value) { $this->_fechaVencimiento = $value; }

  public function getFechaRecepcion() { return $this->_fechaRecepcion; }
  public function setFechaRecepcion($value) { $this->_fechaRecepcion = $value; }

  public function getFechaIngresoSistema() { return $this->_fechaIngresoSistema; }
  public function setFechaIngresoSistema($value) { $this->_fechaIngresoSistema = $value; }

  public function getMontoNeto() { return $this->_montoNeto; }
  public function setMontoNeto($value) { $this->_montoNeto = $value; }

  public function getExentoIVA() { return $this->_exentoIVA; }
  public function setExentoIVA($value) { $this->_exentoIVA = $value; }

  public function getIVA() { return $this->_iVA; }
  public function setIVA($value) { $this->_iVA = $value; }

  public function getObservacion() { return $this->_observacion; }
  public function setObservacion($value) { $this->_observacion = $value; }

  public function getIdFlujo() { return $this->_idFlujo; }
  public function setIdFlujo($value) { $this->_idFlujo = $value; }

  public function getIdProveedor() { return $this->_idProveedor; }
  public function setIdProveedor($value) { $this->_idProveedor = $value; }

  public function getExiste() { return $this->_existe; }
  public function setExiste($value) { $this->_existe = $value; }
//</editor-fold>
  
//<editor-fold defaultstate="collapsed" desc="Metodos Publicos">
  /**
   * constructor
   * @author VSR, 30/04/2012
   */
  public function __construct() {
    try {
        $this->_id = -1;
        $this->_numero = "";
        $this->_fechaEmision = "";
        $this->_fechaVencimiento = "";
        $this->_fechaRecepcion = "";
        $this->_fechaIngresoSistema = "";
        $this->_montoNeto = 0;
        $this->_exentoIVA = 0;
        $this->_iVA = 0;
        $this->_observacion = "";
        $this->_idFlujo = -1;
        $this->_idProveedor = -1;
        $this->_existe = 0;
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * obtiene registro por su id
   * @author VSR, 30/04/2012
   */
  public function obtenerPorId($id = -1) {
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfPlantillaFactura_ObtenerPorId({id});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{id}", $id, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
      $totalRegistros = count($arr);

      //si se encontraron registros entonces se asignan
      if ($totalRegistros > 0) {
        $row = $arr[0];
        $this->_id = ( is_null($row["Id"]) ) ? -1 : $row["Id"];
        $this->_numero = ( is_null($row["Numero"]) ) ? "" : $row["Numero"];
        $this->_fechaEmision = ( is_null($row["FechaEmision"]) ) ? "" : $row["FechaEmision"];
        $this->_fechaVencimiento = ( is_null($row["FechaVencimiento"]) ) ? "" : $row["FechaVencimiento"];
        $this->_fechaRecepcion = ( is_null($row["FechaRecepcion"]) ) ? "" : $row["FechaRecepcion"];
        $this->_fechaIngresoSistema = ( is_null($row["FechaIngresoSistema"]) ) ? "" : $row["FechaIngresoSistema"];
        $this->_montoNeto = ( is_null($row["MontoNeto"]) ) ? 0 : $row["MontoNeto"];
        $this->_exentoIVA = ( is_null($row["ExentoIVA"]) ) ? 0 : $row["ExentoIVA"];
        $this->_iVA = ( is_null($row["IVA"]) ) ? 0 : $row["IVA"];
        $this->_observacion = ( is_null($row["Observacion"]) ) ? "" : $row["Observacion"];
        $this->_idFlujo = ( is_null($row["IdFlujo"]) ) ? -1 : $row["IdFlujo"];
        $this->_idProveedor = ( is_null($row["IdProveedor"]) ) ? -1 : $row["IdProveedor"];
        $this->_existe = ($this->_id == -1) ? 0 : 1;
      } else {
        $this->_id = -1;
        $this->_numero = "";
        $this->_fechaEmision = "";
        $this->_fechaVencimiento = "";
        $this->_fechaRecepcion = "";
        $this->_fechaIngresoSistema = "";
        $this->_montoNeto = 0;
        $this->_exentoIVA = 0;
        $this->_iVA = 0;
        $this->_observacion = "";
        $this->_idFlujo = -1;
        $this->_idProveedor = -1;
        $this->_existe = 0;
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * crea o actualiza un registro
   * @author VSR, 30/04/2012
   */
  public function grabar() {
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfPlantillaFactura_Grabar({id},'{numero}','{fechaEmision}','{fechaVencimiento}','{fechaRecepcion}','{fechaIngresoSistema}',{montoNeto},{exentoIVA},{iVA},'{observacion}',{idFlujo},{idProveedor});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{id}", $this->_id, $sp);
      $sp = str_replace("{numero}", $this->_numero, $sp);
      $sp = str_replace("{fechaEmision}", $this->_fechaEmision, $sp);
      $sp = str_replace("{fechaVencimiento}", $this->_fechaVencimiento, $sp);
      $sp = str_replace("{fechaRecepcion}", $this->_fechaRecepcion, $sp);
      $sp = str_replace("{fechaIngresoSistema}", $this->_fechaIngresoSistema, $sp);
      $sp = str_replace("{montoNeto}", $this->_montoNeto, $sp);
      $sp = str_replace("{exentoIVA}", $this->_exentoIVA, $sp);
      $sp = str_replace("{iVA}", $this->_iVA, $sp);
      $sp = str_replace("{observacion}", $this->_observacion, $sp);
      $sp = str_replace("{idFlujo}", $this->_idFlujo, $sp);
      $sp = str_replace("{idProveedor}", $this->_idProveedor, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
      $totalRegistros = count($arr);

      //si se encontraron registros entonces se asignan
      if ($totalRegistros > 0) {
        $row = $arr[0];
        $this->_id = $row["Id"];
        $this->_existe = 1;
      } else {
        $this->_id = -1;
        $this->_existe = 0;
      }
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * elimina un registro
   * @author VSR, 30/04/2012
   */
  public function eliminar() {
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfPlantillaFactura_Eliminar({id});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{id}", $this->_id, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
      $totalRegistros = count($arr);

      //si se encontraron registros entonces se asignan
      $this->_id = -1;
      $this->_existe = 0;
    } catch (Exception $e) {
      throw new Exception($e->getMessage());
    }
  }

  /**
   * destructor
   * @author VSR, 30/04/2012
   */
  public function  __destruct() {
   // destruye el objeto
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="Metodos Compartidos">
  /**
   * graba los datos de la factura
   * @param <type> $idFlujo
   * @param <type> $strRazonSocial
   * @param <type> $strFechaRecepcion
   * @param <type> $strFechaPago
   * @param <type> $dblMontoNeto
   * @param <type> $dblIVA
   * @param <type> $idUsuario
   * @return string
   * @author VSR, 08/12/2011
   */
  public static function grabarDatos($idFlujo, $strOpcion, $idProveedor, $strNumero, $strFechaEmision, $strFechaVencimiento, $strFechaRecepcion, $dblMontoNeto, $dblIVA, $intExentoIVA, $observacion, $idUsuario) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfPlantillaFactura_GrabarDatos({idFlujo},'{strOpcion}',{idProveedor},'{strNumero}','{strFechaEmision}','{strFechaVencimiento}','{strFechaRecepcion}',{dblMontoNeto},{dblIVA},{intExentoIVA},'{observacion}',{idUsuario});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idFlujo}", $idFlujo, $sp);
      $sp = str_replace("{strOpcion}", $strOpcion, $sp);
      $sp = str_replace("{idProveedor}", $idProveedor, $sp);
      $sp = str_replace("{strNumero}", $strNumero, $sp);
      $sp = str_replace("{strFechaEmision}", $strFechaEmision, $sp);
      $sp = str_replace("{strFechaVencimiento}", $strFechaVencimiento, $sp);
      $sp = str_replace("{strFechaRecepcion}", $strFechaRecepcion, $sp);
      $sp = str_replace("{dblMontoNeto}", $dblMontoNeto, $sp);
      $sp = str_replace("{dblIVA}", $dblIVA, $sp);
      $sp = str_replace("{intExentoIVA}", $intExentoIVA, $sp);
      $sp = str_replace("{observacion}", $observacion, $sp);
      $sp = str_replace("{idUsuario}", $idUsuario, $sp);
      
      //ejecuta procedimiento
      $arr = Bd::exec($sp);
    } catch (Exception $e) {
      //escribe en el log
      Sistema::escribirLog($e->getTraceAsString(), Utilidades::obtenerAmbienteEjecucion(), KLogger::ERROR);
      $arr = null;
    }
    return $arr;
  }

  /**
   * obtiene detalle de la factura
   * @param <type> $idFlujo
   * @return string
   * @author VSR, 08/12/2011
   */
  public static function obtenerDetalle($idFlujo, $entidad, $idUsuario) {
    $arr = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfPlantillaFactura_ObtenerDetalle({idFlujo},'{entidad}',{idUsuario});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idFlujo}", $idFlujo, $sp);
      $sp = str_replace("{entidad}", $entidad, $sp);
      $sp = str_replace("{idUsuario}", $idUsuario, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }

  /**
   * elimina los datos de la factura
   * @param <type> $idFlujo
   * @return <type> 
   * @author VSR, 08/12/2011
   */
  public static function eliminarDatos($idFlujo) {
    $retorno = null;
    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfPlantillaFactura_EliminarDatos({idFlujo});";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idFlujo}", $idFlujo, $sp);

      //ejecuta procedimiento
      $retorno = Bd::exec($sp, Bd::SCALAR);
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
    }
    return $retorno;
  }

  /**
   * determina si un valor ya existe en base de datos para el usuario seleccionado
   * @param <type> $idUsuario
   * @param <type> $valor
   * @param <type> $campoARevisar
   * @return string
   * @author VSR, 01/01/2011
   */
  public static function verificarDuplicidad($idFlujo, $idEmpresa, $idWorkflow, $idProveedor, $valor) {
    $arr = null;

    try {
      //define llamada procedimiento almacenado
      $sp = "CALL spu_WfPlantillaFactura_VerificarDuplicidad({idFlujo}, {idEmpresa}, {idWorkflow}, {idProveedor}, '{valor}');";

      //reemplaza marcas por valores reales
      $sp = str_replace("{idFlujo}", $idFlujo, $sp);
      $sp = str_replace("{idEmpresa}", $idEmpresa, $sp);
      $sp = str_replace("{idWorkflow}", $idWorkflow, $sp);
      $sp = str_replace("{idProveedor}", $idProveedor, $sp);
      $sp = str_replace("{valor}", $valor, $sp);

      //ejecuta procedimiento
      $arr = Bd::exec($sp);
    } catch (Exception $e) {
      $arr = null;
    }
    return $arr;
  }


//</editor-fold>
}
?>

